#define _CRT_SECURE_NO_WARNINGS 1


#include"heap.h"

//void AdgustUp(datatype* a, int child)//向上调整算法
//{
//	int parent = (child - 1) / 2;
//	while (child > 0)
//	{
//		if (a[child] > a[parent])
//		{
//			swap(&a[child], &a[parent]);
//			child = parent;
//			parent = (child - 1) / 2;
//		}
//		else
//		{
//			break;
//		}
//	}
//
//
//}
void test1()
{
	int arr[] = { 8,4,5,9,10,3,7 };
	HP hp;
	heapinit(&hp);
	for (int i = 0; i < sizeof(arr) / sizeof(int); i++)
	{
		heappush(&hp, arr[i]);
	}
	int i = 0;
	while (!heapempty(&hp))
	{
		arr[i] = heaptop(&hp);
		printf("%d ", arr[i]);
		heappop(&hp);
		i++;

	}

}
void test2()	
{
	int arr[] = { 8,4,5,9,10,3,7,11};
	for (int i =1; i < sizeof(arr) / sizeof(int);i++)
	{
		AdgustUp(arr, i);

	}

	for (int i = 0; i < sizeof(arr) / sizeof(int); i++)
	{
		printf("%d ", arr[i]);
	}


}
void heapsort()
{
	int arr[] = { 8,4,5,9,10,3,7,11,0,1,23};
	//for (int i = 1; i < sizeof(arr) / sizeof(int); i++)
	//{
	//	AdgustUp(arr, i);

	//}//建立堆（向上建堆）
	for (int i = (sizeof(arr) / sizeof(int)-2)/2; i >= 0; i--)
	{
		AdugustDown(arr, sizeof(arr) / sizeof(int),i);

	}//建立堆（向下建堆）
	int end = sizeof(arr) / sizeof(int) - 1;
	while (end >= 0)
	{
		swap(&arr[end], &arr[0]);
        --end;
		AdugustDown(arr, end+1, 0);
		
	}
	for (int i = 0; i < sizeof(arr) / sizeof(int); i++)
	{
		printf("%d ", arr[i]);
	}


}



int main()
{
	//test1();
	//test2();
	heapsort();
	return 0;
}